home *** CD-ROM | disk | FTP | other *** search
/ Acorn User: China / Acorn User China CD-ROM (UK) (Disc B) / Acorn User China CD-ROM (UK) (Disc B).bin / STUTTGART / FROMUTS / UNIXLIB37B / src_c_bsearch < prev    next >
Encoding:
C/C++ Source or Header  |  1990-09-26  |  811 b   |  47 lines

  1. #ifdef __STDC__
  2. static char sccs_id[] = "@(#) bsearch.c 1.1 "__DATE__" HJR";
  3. #else
  4. static char sccs_id[] = "@(#) bsearch.c 1.1 26/9/90 HJR";
  5. #endif
  6.  
  7. /* bsearch.c (c) Copyright 1990 H.Rogers */
  8.  
  9. #ifdef __STDC__
  10. #include <stddef.h>
  11. #include <stdlib.h>
  12. #else
  13. #include "sys/types.h"
  14. void *bsearch();
  15. #endif
  16.  
  17. #ifdef __STDC__
  18. void *bsearch(register const void *k,const void *v,register size_t n,
  19.     register size_t z,register int (*c)(const void *,const void *))
  20. #else
  21. void *bsearch(k,v,n,z,c)
  22. register const void *k;
  23. const void *v;
  24. register size_t n;
  25. register size_t z;
  26. register int (*c)();
  27. #endif
  28. {
  29. register char *b,*m;
  30. register int p;
  31.  
  32. b = (char *)v;
  33.  
  34. while (n)
  35.   {
  36.   m = b + ((n>>1) * z);
  37.   p = (*c)(k,m);
  38.   if (!p) return(m);
  39.   if (p > 0)
  40.     b = m + z,n = n - (n>>1) - 1;
  41.   else
  42.     n = (n>>1);
  43.   }
  44.  
  45. return(0);
  46. }
  47.